/**
 * 
 */
package belote.service.user;

import org.omg.CORBA.UserException;

/**
 * @author Gwenn
 * 
 */
public interface UserService {

	/**
	 * Recupere un utilisateur a partir de son identifiant.
	 * 
	 * @param pUId
	 *            Identifiant de l'utilisateur.
	 * @return Objet <code>Utilisateur</code> ou <code>null</code> s'il n'existe
	 *         pas.
	 */
	User select(long pUId);

	/**
	 * Recupere un utilisateur a partir de son login et de son mot de passe.
	 * 
	 * @param pLogin
	 *            Login de l'utilisateur.
	 * @param pMotDePasse
	 *            Mot de passe de l'utilisateur.
	 * @return Objet <code>User</code> ou <code>null</code> s'il n'existe pas.
	 */
	User selectByLoginPassword(String pLogin, String pMotDePasse);

	/**
	 * Recupere un utilisateur a partir de son login.
	 * 
	 * @param pLogin
	 *            Login de l'utilisateur.
	 * @return Objet <code>User</code> ou <code>null</code> s'il n'existe pas.
	 */
	User selectByLogin(String pLogin);

	/**
	 * Recupere un utilisateur a partir de son email.
	 * 
	 * @param pEmail
	 *            Email de l'utilisateur.
	 * @return Objet <code>User</code> ou <code>null</code> s'il n'existe pas.
	 */
	User selectByEmail(String pEmail);

	/**
	 * Test si un utilisateur utilise deja le login en parametre.
	 * 
	 * @param pLogin
	 *            Login a tester
	 * @return <code>true</code> si le login est deja utilise.
	 *         <code>false</code> si le login n'est pas utilise.
	 * 
	 */
	boolean isLoginExists(String pLogin);

	/**
	 * Test si un email est utilise par un utilisateur existant.
	 * 
	 * @param pEmail
	 *            Email a tester
	 * @return <code>true</code> si l'email est deja utilise. <code>false</code>
	 *         si l'email n'est pas utilise.
	 */
	boolean isEmailExists(String pEmail);

	/**
	 * Cree l'utilisateur en parametre dans le systeme de stockage.
	 * 
	 * @param pUser
	 *            Utilisateur a creer.
	 * @return Objet <code>User</code> complete avec son identifiant.
	 * @throws UserException
	 *             Si l'utilisateur existe deja (meme login ou meme email).
	 */
	void insert(User pUser) throws UserServiceException;

	/**
	 * Active un utilisateur.
	 * 
	 * @param pUID
	 *            Identifiant de l'utilisateur a activer.
	 * @throws UserException
	 *             si l'utilisateur n'est pas connu du systeme de stockage si
	 *             l'utilisateur est deja active.
	 */
	void activate(long pUID) throws UserServiceException;

	/**
	 * Modifie l'utilisateur en parametre dans le systeme de stockage.
	 * 
	 * @param pUser
	 *            Utilisateur a modifier.
	 * @return Objet <code>User</code>.
	 * @throws UserException
	 *             si l'utilisateur n'est pas connu du systeme de stockage, si
	 *             le login est deja utilise par un autre utilisateur, si
	 *             l'email est deja utilise par un autre utilisateur.
	 */
	void update(User pUser) throws UserServiceException;

	/**
	 * Supprime l'utilisateur du systeme de stockage.
	 * 
	 * @param pUID
	 *            Identifiant de l'utilisateur a supprimer
	 * @throws UserException
	 *             si l'utilisateur n'est pas connu du systeme de stockage.
	 */
	void delete(long pUID) throws UserServiceException;
}
